﻿
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
    string[,] str =
{       // 名称，方法
        {"城市地图","City" }//,
        //{"最少转机","Least" }
    };
    int index = 0;
}
<div class="layui-tab layui-tab-brief">
    <ul class="layui-tab-title title-pin">
        @{
            for (int i = 0; i < str.Length / 2; i++) {
                <li class="@(i==0?"layui-this":"")">@str[i, 0]</li>
            }
        }
    </ul>
    <div class="layui-tab-content">
        <!-- 城市地图 -->
        <div class="layui-tab-item layui-show">
            <blockquote class="layui-elem-quote ">
                <p>有五座城市</p>
                <p>一号城市到二号城市的距离为2，1 2 2</p>
                <p>一号城市到五号城市的距离为10，1 5 10</p>
                <p>二号城市到三号城市的距离为3，2 3 3</p>
                <p>二号城市到五号城市的距离为7，2 5 7</p>
                <p>三号城市到一号城市的距离为4，3 1 4</p>
                <p>三号城市到四号城市的距离为4，3 4 4</p>
                <p>四号城市到五号城市的距离为5，4 5 5</p>
                <p>五号城市到三号城市的距离为3，5 3 3</p>
                <p>求指定城市到指定城市之间的最短路径是多少？</p>
                <img src="~/Content/Images/Chart01.png" class="layer-image" />
                <img src="~/Content/Images/Chart02.png" class="layer-image" />
            </blockquote>

            <blockquote class="layui-elem-quote layui-quote-nm">
                <b>思路：</b>使用深度优先算法，查找每一种可行的路线，并记录最小值
            </blockquote>

            @* 测试文本框 *@
            @Html.Partial("_Input",
           new ViewDataDictionary { { "Url", Url.Action(str[index++, 1], "Chart") }, { "Title", "计算" }, { "Des", "输入起始城市和终点城市，逗号分割" } })

            <pre class="layui-code">
        
        // 最小路径
        int Min = -1;
 
        /// <summary>
        /// 深度查找城市路径
        /// </summary>
        /// <param name="Arr">路径地图< /param>
        /// <param name="r">起点< /param>
        /// <param name="sum">所用路径长度< /param>
        /// <param name="c">终点< /param>
        /// <returns></returns>
        public void CityLong(int[,] Arr, int r, int sum, int c) {
            // 当起点即为终点时，抵达目的地
            if (r == c) {
                // 若最小值大于当前的路径长度
                if (Min > sum||Min< 0) 
                    Min=sum;
                    return;
                }
            int temp=0;
 
            // 寻找能够从城市r去往的下一个城市
            for (int i = 0; i < Arr.GetLength(0); i++) {
                // 找到下一个城市
                if (Arr[r, i] > 0) {
                    // 标记下一个城市已经走过
                    temp = Arr[r, i];
                    Arr[r, i] = -1;
                    // 从下一个城市出发
                    CityLong(Arr, i, sum + temp, c);
                    // 还原
                    Arr[r, i] = temp;
                }
            }
 
        }
</pre>
        </div>
    </div>
</div>
